package com.major.dawn.leetCode.string;


//  如何从一个字符串中找出第一个非重复的字符？

/**
 * 问题装换;
 * 1. 字符串包含那些字符类型
 * 2. 字符数字中是否包含当前字符
 *
 * 在第一次遍历的时候，维护一个字符的顺序表
 * <p>
 * 这个两个问题都很熟悉，在限定字符类型的情况下，最有效率的模式就hashTable的方法
 */
public class FindFirstUniqueChar {

//    只包含小写字符* 这种实现的时间复杂度 ： 2*n
    public int firstUniqChar(String s) {
        if (s == null || s.equals("")) {
            return -1;
        }
        int[] charHashTable = new int[126];
        char[] chars = s.toCharArray();

        for (int i = 0; i < chars.length; i++) {
            int curChar = chars[i];
            charHashTable[curChar]++;
        }

        for (int i = 0; i < chars.length; i++) {
            int curChar = chars[i];
            if (charHashTable[curChar] == 1) {
                return i;
            }
        }

        return 0;

    }

    public static void main(String[] args) {
        FindFirstUniqueChar findFirstUniqueChar = new FindFirstUniqueChar();
        int loveleetcode = findFirstUniqueChar.firstUniqChar("");
        System.out.println(loveleetcode);
    }




}

